学习如何设计一款布林带(Bollinger Bands)交易系统

您所在的位置:网站首页 bollinger bands参数 学习如何设计一款布林带(Bollinger Bands)交易系统

学习如何设计一款布林带(Bollinger Bands)交易系统

2023-06-29 22:13| 来源: 网络整理| 查看: 265

概述

在交易领域,有很多工具和方法可用来帮助我们实现交易目标。这些工具可根据市场条件或状况来使用。 

方法之一是波带交易。 波带交易的主要概念是在波带的两条边界之间进行交易,据判定的波带买入和卖出,并从中获益。 其中一个工具是布林带指标。 该指标是技术分析和交易领域最流行或最常用的指标之一。

在本文中,我将与大家分享关于这个布林带指标的信息,从而增强我们对它是什么、我们如何计算它、以及我们如何使用它对我们有利的理解。之后,您将能够根据自己的策略以自己喜欢的方式使用它。 接下来,我将与大家分享我们如何通过准确而简单的方式,基于这个布林带指标来设计一款交易系统。 因此,我们将涵盖以下主题:

布林带定义 布林带策略 布林带策略系统设计 结束语 参考

我们将学习布林带,它测量数据在其平均值附近的离散度。该指标由约翰·博林格(John Bollinger)创造。 它由围绕 20 天移动平均线的两条波段构成,以测量数据(价格)在其均值(20 天移动平均线)周围的离散度。 

布林带指标似乎与轨道线指数相同,因为它在价格周围也有两条波带。 但事实并非如此,因为布林带和轨道线之间的区别在于,布林带指标并没有以固定百分比绘制于移动平均线之外位置,因布林带指标的计算允许根据移动平均线的标准偏差扩张或收缩。 我们将在布林带定义章节或主题中了解这些,以及其它细节。

我们还将学习如何通过一些方式来使用布林格带策略,从而令我们的交易富有竞争力、并从中受益,这些肯定都会在布林带策略章节里涉及。

然后我们将进入本文最有趣的部分:如何准确可靠地在算法交易系统中运用这些策略,这是我们将在布林带策略蓝图和体系设计部分要探讨的内容。

请注意:  本文中的所有代码都将以 MQL5 编写,并将在 MetaTrader 5 上执行。 如果您想练习和提高学习能力,我建议您自行编写和执行代码。 因此,您需要 MetaTrader 5 终端来执行代码,需要 MQL5 的 MetaEditor 来编写代码,下面的示意图就是为它们准备的。

在设备上下载并安装 MetaTrader 5 之后,您可从以下链接下载:https://www.metatrader5.com/zh/download。 之后,您会发现 MetaTrader 5 窗口与下图相同:

MT5 平台

当您打开 MetaTrader 5 终端时,您可以按 F4 打开 MetaEditor,或者单击工具菜击,然后我们可以选择 MetaQuotes 语言编辑器。 以下示意图显示了如何从 MetaTrader 5 打开 MetaEditor,并编写代码:

Metaeditor 打开 1

Metaeditor 打开 2

下图显示打开 MetaEditor 编辑器窗口: 

Metaeditor 窗口

下图显示了如何创建新文件来编写您的代码:

Metaeditor - 新建文件

打开新建文件来编写智能交易系统 打开新建文件来编写自定义指标 打开新建文件来编写脚本

更多相关信息,您可以通过以下链接阅读我之前的文章:https://www.mql5.com/zh/articles/10293

正如我经常提到的,在不同的事件中,编程或编码是一种神奇的工具,它令我们能够自动、准确地完成动作,从而让我们的生活变得轻松、顺利。 因此,在这类领域投资的一个重要目标就是,学习如何以适当的方式使用它,在生活的不同领域得到期望的目标。说到交易,我需要想象一下,当您给电脑下达指令,让它替您做事;在您预期的时刻,电脑会毫无异议地遵照执行您的指令;如此,您就有时间去做任何其它事情,生活将会多么轻松愉快。 这是一种令人惊叹的生活方式,因此,以适合自己的方式,体会编码或编程的乐趣将是一个重要的目标,即便您为自己编码、或请别人为您编码。

免责声明

这篇文章的所有内容都是为了教学目的,而非为了其它目的。 因此,您应对根据本文内容采取的任何行动负责,因为本文内容不保证任何结果。

那么,我们通读文章来了解更多关于这个有趣的话题和指标。

布林带定义

波带交易的概念历史悠久、有趣,并在许多策略里所采用。波带交易主要基于在某种趋势指标之上和之下构建波带。 

例如,我们可以基于移动平均线或轨道线,并按百分比距其上下偏移。 此外,还有两条平行线形成通道,分别位于价格上方和下方,可用于检测转折点。 但所有这些方法都是固定的,不会依据价格变动做出反应。 换句话说,它们不会随着价格波动而扩张或收缩。

布林带可以做到这一点,这在于它实现的具体算法。 我们将在本章节中看到指标计算的细节。

下图显示了轨道线指标的示例,及其依据价格的显示方式:

EURUSDH1 - 轨道线

正如您在前一张图片中所见,我们有两条围绕价格的波带:下波带围绕着最低价位,上波带围绕着最高价位。 所以,我们需要知道的主要思想是,有很多方法是基于历史上的交易波带,最常见的是百分比波带。 

依据交易波带的思路也开发出很多工具。 其中一个开发出的工具就是用于交易波带的布林带指标。 它不同于前面提到的方法,因为它的算法能够进行扩张和收缩。

布林带指标由 John Bollinger 于 20 世纪 80 年代初创建,他是金融市场和交易领域广受欢迎的专家之一。 他是一位 CFA(特许金融分析师)和 CMT(特许市场技术员)。

布林带指标是一款流行的技术指标,它衡量波动性,可以根据市场情况进行扩张和收缩。 它可用于所有金融市场,如股票、外汇......等等。现在,我们来谈谈布林带的构造:

就像我们之前提到的,交易波带的概念是从衡量一些趋势指标的中心开始的。 然后我们在这些衡量值的上下构造波带。 对于布林带指标,趋势中心的衡量是简单移动平均值,波带则由移动标准偏差的波动性度量确定。

布林带指标:

它衡量数据在其平均值(移动平均值)周围的离散度。 它是一个波动性指标。 布林带和轨道线(或任何以固定百分比的交易波带)方法之间的区别在于,其它指标采用或高于或低于移动平均线的特定百分比,但布林带采用的是移动平均线的标准偏差。 波动性增加时,波带自动扩张,波动性降低时,波带则自动收缩。 这样的动态特性令它们即使采用标准设置也能适用于不同的证券。 布林带是一款交易工具,可用于判定交易的入场和离场点。 波带通常用于判定超买和超卖状况。 它可以用来识别 M 形顶部和 W 形底部,或者判定趋势的强度。 下面的公式显示了如何计算布林带:

BB 计算

现在我们来看一个计算布林带的示例: 假设我们有 20 个交易日的收盘价,如下表所示:    天数       收盘价 $   1 20 2 30 3 35  4 30   5 40  6 45 7 50 8 55 9 40 10 45 11 50 12 35 13 40 14 50 15 60 16 65 17 70 18 60 19 70 20 75

BB 计算

因此,布林带的计算将如下所示:

 BB 计算示例

BB 计算示例 1

调整设置:

现在,如果有人问我们是否可以通过任何其它方式调整布林带的设置,从而适用于我们的策略或交易计划,答案是肯定的,我们当然可以这样做,尤其是经过调整和测试,它能给我们带来优良的结果。 我们还必须知道,布林建议对标准偏差乘数做一些小的调整。 我们还必须知道,改变移动平均线的周期会影响标准偏差的计算周期。 布林还建议,如果我们采用 50 周期的简单移动平均线,则将标准偏差乘数增加到 2.1;如果我们采用 10 周期的简单移动平均线,则将其减少到 1.9。 

如今,在当前世界中,我们不需要手动计算它,因为在 MetaTrader 5 中已经为我们准备好了内置指标。 下图展示了如何将其添加或将指标附加到图表上。 在 MetaTrader 5 中选择插入菜单:

1- BB 指标插入

然后选择指标,再选择趋势,之后选择布林带:

2- BB 指标插入

选择布林带指标后,将显示指标窗口参数。 它显示指标的默认参数。 它具有以下可调参数:

1.    Period 是为移动平均线选择周期。

2.    Deviations 是为波带选择上下偏差参数。

3.    Apply to: 选择将采用的价格类型(收盘价、开盘价、最高价、最低价、中间价、典型价格和加权收盘价)参数。

4.    Style: 选择指标的样式(指标线条的颜色、形状和宽度)。

5.    Shift: 设置应用指标的移位值。

就像我之前提到的,我们可以根据交易者的输入和策略来调整这些设置。

3- BB 参数

现在,我们在价格图表上绘制了布林带指标,其显示方式与下图相同:

EURUSDH1 - BB

正如我们在前一张图片上所见,被两条波带(布林带)包围,价格较低的波带低于移动平均线(平均值),而价格较高的波带高于移动平均线(平均值)和价格。 

布林带策略

此刻,我们将讨论布林带策略,我们将知道如何运用它,并从中受益。

我们可以利用不同市场条件、或不同市场走势的布林带,如上升趋势、下降趋势和横盘。 在每一种市场条件下,我们都可以运用众多策略,但在这里我们只提其中的一些。

上升趋势期间

首先,我们需要了解在上升趋势中价格如何随移动平均线移动,因为我们可以发现价格在上升趋势中的大部分时间都在其均值(移动平均线)之上移动。

所以,我们会发现,在上升趋势中,价格大部分时间在移动平均线和波带上边界之间移动。 这意味着,因受买方支配,价格会出现更高的低点和更高的高点。

上升趋势

上升趋势

此刻,布林带可以帮助我们识别这种上升趋势,因为我们可以发现价格在移动平均线和波带上边界之间移动。 下图就是一个示例:正如您从中清楚地看到的,绿色区域的价格在上升趋势中移动,并在移动平均线和上限之间移动:

EURUSDWeekly - BB 上升趋势

我们将在这里提到的所需策略是: 当价格上穿移动平均线时买入,目标将是波带上限。 价格 > 均线 = 做多,波带上限 = 目标

EURUSDWeekly - BB 上行策略

下跌趋势期间

首先,我们需要了解在下跌趋势中价格如何随移动平均线移动,因为我们可以发现价格在下跌趋势中的大部分时间都在其均值(移动平均线)之下移动。

所以,我们会发现,在下跌趋势中,价格大部分时间在移动平均线和波带下边界之间移动。 这意味着,因受卖方支配,价格会出现更低的高点和更低的低点。

下跌趋势

下跌趋势

此刻,布林带可以帮助我们识别这种下跌趋势,因为我们可以发现价格在移动平均线和波带下边界之间移动。 下图就是一个示例,我们可以清楚地发现,红色区域的价格呈下跌趋势,并在移动平均线和波带下限之间移动:

EURUSDDaily - BB 下跌趋势

我们将在这里提到的所需策略是: 当价格下穿移动平均线时做空,目标将是波带的下限。 价格 < 均线 = 做空,波带下限 = 目标

EURUSDDaily - BB 下跌策略

横盘期间

首先,我们需要了解价格在横盘期间是如何变动的,因为我们可以发现横盘是除了上升趋势和下跌趋势之外的任何走势。

横盘表示买方和卖方之间的平衡,因为他们中的一方无法完全支配市场。 以下图片是一些横盘走势的示例:

横盘 1

横盘 2

横盘 3

横盘 4

下面是一个横盘的真实例子,因为我们可以清楚地发现,绿色区域的价格横向移动,没有明确的上升或下跌方向:

 横盘 

之前示意图是横盘走势的示例,比我提到的更多,但横盘走势的概念是除了上升和下跌趋势之外的任何走势。

现在,我们需要知道横盘走势将如何影响移动平均线,因为价格在移动平均线附近游走,故它会随机上穿或和下穿均线。 下图就是一个示例:

 横盘均线

那么,价格如何随波林带移动呢? 价格在波带下限和上限之间波动,下图就是一个示例:

GBPUSD1H - BB 横盘

据我们所知,价格在波带下限和上限之间波动,横盘期间的策略是在下限做多,目标是上限,或在上限做空,目标是下限。 价格位于下限 = 做多,波带上限 = 目标 价格位于上限 = 做空,波带下限 = 目标

GBPUSD1H - BB 横盘策略

在上图中: 我们可以在波带下限做多,在波带上限获利了结。 我们可以在上限做空,在下限获利了结。

布林带策略系统设计

在这个有趣的部分,我们将学习如何基于布林带指标编写算法交易系统。 我们还将学习如何创建之前提到的三种交易策略(上升趋势、下跌趋势和横盘策略)。

您可以随心所欲地设计自己的交易系统,从简单的到先进的交易系统。 例如,您可以创建并设计一个简单的交易系统,它会根据一个简单的概念生成一个简单的信号,然后您再根据这个信号采取行动;或者您可以创建并设计一个高级交易系统,它不仅会为您提供简单的信号,而且会根据相关概念的组合给出一个高级信号,并自动执行。 有很多不同的方式。 在本文中,我们将讨论一个简单的交易系统 — 我们创建它只是为了学习这个概念。 基于这些知识,您就能开发类似的系统,或者按照自己的方式设计自己的交易系统。 我希望这篇文章对您有用,并帮助您达成交易或投资目标。

首先,我们要学习如何设计一个纯布林带代码,该代码允许在图表上显示三个注释,分别为移动平均值、波带上限值和下限值。

以下是执行此操作的代码:

//+------------------------------------------------------------------+ //|                                       Simple Bollinger Bands.mq5 | //|                                  Copyright 2022, MetaQuotes Ltd. | //|                                             https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function                                             | //+------------------------------------------------------------------+ void OnTick()   {    //create an array for several prices    double MiddleBandArray[];    double UpperBandArray[];    double LowerBandArray[];       //sort the price array from the cuurent candle downwards    ArraySetAsSeries(MiddleBandArray,true);    ArraySetAsSeries(UpperBandArray,true);    ArraySetAsSeries(LowerBandArray,true);       //define Bollinger Bands    int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);       //copy price info into the array    CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);    CopyBuffer(BollingerBands,1,0,3,UpperBandArray);    CopyBuffer(BollingerBands,2,0,3,LowerBandArray);       //calcualte EA for the cuurent candle    double MiddleBandValue=MiddleBandArray[0];    double UpperBandValue=UpperBandArray[0];    double LowerBandValue=LowerBandArray[0];       //comments    Comment("MiddleBandValue: ",MiddleBandValue,"\n",    "UpperBandValue: ",UpperBandValue,"\n","LowerBandValue: ",LowerBandValue,"\n");      } //+------------------------------------------------------------------+

现在,在编写并编译代码之后,我们必须确保代码没有错误或警告,如下图所示:

1- SBB - 无错误

然后从导航窗口中找到该文件,并将其拖放到图表上,或双击该文件加以执行,并将其附加到图表上,如下图所示:

 2- SBB - 文件

3- SBB 执行窗口

下图展示的是运行我们程序的图表:

4- SBB 附加到图表

现在,我们将学习如何设计简单的布林带策略。 策略 1: 上升趋势波林带策略蓝图:  价格 > 均线 = 做多,波带上限 = 盈利目标, 或 = 无信号

上升趋势波林带策略蓝图:

以下是执行此操作的代码:

//+------------------------------------------------------------------+ //|                                          Uptrend BB strategy.mq5 | //|                                  Copyright 2022, MetaQuotes Ltd. | //|                                             https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function                                             | //+------------------------------------------------------------------+ void OnTick()   {    //define Ask, Bid    double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);    double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);       //create an array for several prices    double MiddleBandArray[];    double UpperBandArray[];    double LowerBandArray[];       //sort the price array from the cuurent candle downwards    ArraySetAsSeries(MiddleBandArray,true);    ArraySetAsSeries(UpperBandArray,true);    ArraySetAsSeries(LowerBandArray,true);       //define Bollinger Bands    int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);          //copy price info into the array    CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);    CopyBuffer(BollingerBands,1,0,3,UpperBandArray);    CopyBuffer(BollingerBands,2,0,3,LowerBandArray);       //calcualte EA for the cuurent candle    double MiddleBandValue=MiddleBandArray[0];    double UpperBandValue=UpperBandArray[0];    double LowerBandValue=LowerBandArray[0];       //giving buy signal when price > MA    if (       (Ask>=MiddleBandArray[0])    && (Ask=UpperBandArray[0])       )          {          Comment("TAKE PROFIT");          }            //check if we have no signal          if (       (Ask MA    if (       (Ask=UpperBandArray[0])       )          {          Comment("TAKE PROFIT");          }        } //+------------------------------------------------------------------+

该策略产生的信号:

做多信号 - 横盘 BB

做多止盈信号 - 横盘 BB

以下步骤(如下面的屏幕截图所示): 确保您的代码没有错误或警告 找到文件 通过拖放或双击要附加在图表上的文件来执行代码

13- BSBB - 无错误

 14- BSBB 文件

15- BSBB 执行窗口

下图展示的是代码执行后,以及代码在图表上的显示方式,或程序如何附加到图表上:

 16- BSBB 附加到图表

B-   当触及波带上限时生成做空信号,

以下是执行此操作的代码: //+------------------------------------------------------------------+ //|                                    Sell sideways BB strategy.mq5 | //|                                  Copyright 2022, MetaQuotes Ltd. | //|                                             https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function                                             | //+------------------------------------------------------------------+ void OnTick()   {    //define Ask, Bid    double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);    double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);       //create an array for several prices    double MiddleBandArray[];    double UpperBandArray[];    double LowerBandArray[];       //sort the price array from the cuurent candle downwards    ArraySetAsSeries(MiddleBandArray,true);    ArraySetAsSeries(UpperBandArray,true);    ArraySetAsSeries(LowerBandArray,true);       //define Bollinger Bands    int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);          //copy price info into the array    CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);    CopyBuffer(BollingerBands,1,0,3,UpperBandArray);    CopyBuffer(BollingerBands,2,0,3,LowerBandArray);       //calcualte EA for the cuurent candle    double MiddleBandValue=MiddleBandArray[0];    double UpperBandValue=UpperBandArray[0];    double LowerBandValue=LowerBandArray[0];       //giving sell signal when price < MA    if (       (Bid>=UpperBandArray[0])       )          {          Comment("SELL");          }         //check if we have a take profit signal          if (       (Ask


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3